home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #119 (1991-03)(Amiga User Group Deutschland e.V.).adf / Assembler_Programme / Color.source < prev    next >
Text File  |  1989-07-03  |  6KB  |  145 lines

  1. ;»»»»»»»»»»»»»»»»»»»»»» COLOR nr,rgb nr,rgb ...«««««««««««««««««««««««
  2. ;»                                                                   «
  3. ;»        Ändert den Inhalt mehrer Farbregister vom CLI aus.         «
  4. ;»                                                                   «
  5. ;» Parameter: nr = 2-stellige Nummer  | rgb = 3-stellige Hexzahl für «
  6. ;»                 des Farbregisters: |       die Farbmischung       «
  7. ;»                 00 - 31            |       Ziffern: 0-9, dann A-F «
  8. ;»                                                                   «
  9. ;» Zwischen einem Parametersatz (nr,rgb) und dem nächsten muß 1 Leer-«
  10. ;» zeichen stehen !                                                  «
  11. ;»                                                                   «
  12. ;»                  © Juni 1989 by Michael Gottwald                  «
  13. ;»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»«««««««««««««««««««««««««««««««««««
  14.  
  15.    OpenLib  = -408
  16.    CloseLib = -414
  17.    SetRGB4  = -288
  18.    Exit     = -144
  19.  
  20. run:
  21.  
  22. ;----Librarys öffnen--------------------------------------------------
  23.  
  24.          move.l  a0,Pointer        ;Zeiger auf Parametertext retten
  25.          subq    #1,d0
  26.          beq     error             ;keine Parameter ? - dann Fehler
  27.          move.l  $4,a6             ;Exec_Base holen
  28.          lea     DosName,a1
  29.          jsr     OpenLib(a6)       ;Dos-Library öffnen
  30.          move.l  d0,DosBase
  31.          lea     GfxName,a1
  32.          jsr     OpenLib(a6)       ;Graphics-Library öffnen
  33.          move.l  d0,GfxBase
  34.          lea     IntName,a1
  35.          jsr     OpenLib(a6)       ;Intuition.Library öffnen
  36.          move.l  d0,IntBase
  37.  
  38. ;----Aktuellen ViewPort holen und ablegen-----------------------------
  39.  
  40.          move.l  d0,a0
  41.          move.l  $38(a0),a0        ;Aktuellen Screenhandle holen
  42.          add.l   #$2c,a0           ;...auf ViewPort biegen...
  43.          move.l  a0,ViewPort       ;...und ablegen
  44.  
  45. ;----Erstes Zeichen suchen und auf Ende ("CR" Code 13) prüfen---------
  46.  
  47. look:    move.l  Pointer,a0        ;Zeiger auf Parametertext holen
  48. loop:    cmp.b   #32,(a0)+         ;Leerzeichen überlesen
  49.          beq     loop
  50.          subq.l  #1,a0
  51.          cmp.b   #13,(a0)          ;CR-Code (RETURN) gefunden ?
  52.          beq     end               ;ja, dann beenden
  53.  
  54. ;----Parameter auswerten----------------------------------------------
  55.  
  56.          move.l  #0,a1    
  57.          bsr     getchar           ;Ziffer auswerten
  58.          mulu    #10,d0            ;erste Ziffer = Zehner
  59.          exg     d0,a1             ;nach A1 retten
  60.          bsr     getchar           ;Einer holen
  61.          add.l   d0,a1             ;in A1 steht nun die Farbreg.nr.
  62.  
  63.          cmp.b   #44,(a0)+         ;auf Komma prüfen
  64.          bne     error             ;falls nicht gefunden, Fehler
  65.          bsr     gethex            ;Hexzahl-Ziffer auswerten
  66.          exg     d0,d1             ;Rot-Wert nach D1
  67.          bsr     gethex            ;nächste Ziffer...
  68.          exg     d0,d2             ;Grün-Wert nach D2
  69.          bsr     gethex            ;letzte Ziffer...
  70.          exg     d0,d3             ;Blau-Wert nach D3
  71.       
  72.          move.l  a0,Pointer        ;Zeiger retten
  73.          exg     a1,d0             ;Farbregisternummer nach D0
  74.          move.l  GfxBase,a1        ;Endadresse der Graphics-Lib. holen
  75.          move.l  ViewPort,a0       ;Zeiger auf ViewPort...
  76.          jsr     SetRGB4(a1)       ;Farbregister ändern
  77. brk:     jmp     look              ;Nächsten Parametersatz oder Ende
  78.                                    ;suchen
  79.  
  80. ;----Dezimalziffer holen und überprüfen-------------------------------
  81.  
  82. getchar: clr.l   d0
  83.          move.b  (a0)+,d0          ;Zeichen (Ziffer) holen
  84.          cmp.b   #47,d0            ;Zeichencode >= 48 ("0") ?
  85.          bls     error             ;<= 47, dann Fehler
  86.          cmp.b   #57,d0            ;Zeichencode <= 57 ("9") ?
  87.          bgt     error             ;> 57, dann Fehler
  88.          sub.l   #48,d0            ;Zeichencode - 48 = Ziffernwert
  89.          rts
  90.  
  91. ;----Hexadezimalziffer holen und überprüfen---------------------------
  92.  
  93. gethex:  clr.l   d0
  94.          move.b  (a0)+,d0
  95.          cmp.b   #47,d0
  96.          bls     error
  97.          cmp.b   #57,d0
  98.          bgt     chkhex            ;auf Hexadezimal (A-F) prüfen
  99.          sub.l   #48,d0
  100.          rts
  101. chkhex:  cmp.b   #64,d0            ;Zeichencode >= 65 ("A") ?
  102.          bls     error             ;kleiner, dann Fehler
  103.          cmp.b   #70,d0            ;<= 70 ("F") ?
  104.          bgt     little            ;> 70, dann auf Kleinbuchst. prüfen
  105.          sub.l   #55,d0            ;Zeichencode - 55 = Ziffernwert
  106.          rts
  107. little:  cmp.b   #96,d0            ;<= 96 ("a") ?
  108.          bls     error
  109.          cmp.b   #102,d0           ;<= 102 ("f") ?
  110.          bgt     error
  111.          sub.l   #87,d0
  112.          rts
  113.  
  114. ;----Librarys schließen-----------------------------------------------
  115.  
  116. end2:    move.l  $4,a6
  117.          move.l  IntBase,a1
  118.          jsr     CloseLib(a6)      ;Intuition-Library schließen
  119.          move.l  GfxBase,a1
  120.          jsr     CloseLib(a6)      ;Graphics-Library schließen
  121.          move.l  DosBase,a6
  122.          ;jsr exit(a6)              ;Ende des Programms
  123.          rts
  124.  
  125. ;----Ende (alles o.k.)------------------------------------------------
  126.  
  127. end:     clr.l   d1                ;Return-Code = 0 (kein Fehler)
  128.          bra     end2
  129.  
  130. ;----Fehler (und beenden)---------------------------------------------
  131.  
  132. error:   move.l  #1,d1             ;Return-Code = 1 (Fehler)
  133.          bra     end2
  134.  
  135. ;---------------------------------------------------------------------
  136.   even
  137. IntName:  dc.b "intuition.library",0
  138. IntBase:  dc.l 0
  139. GfxName:  dc.b "graphics.library",0,0
  140. GfxBase:  dc.l 0
  141. DosName:  dc.b "dos.library",0
  142. DosBase:  dc.l 0
  143. ViewPort: dc.l 0  
  144. Pointer:  dc.l 0
  145.